基于 Racket 的 To-Do List 工具 RReminder

#Innolight

Pasted image 20250404161632.png|450

![[RReminder.excalidraw]]

需求背景

目前市面上的 To-Do List 工具的数据都是保存在云端的,违背了我对数据安全的一些准则。大多工具都是及其复杂,而我只是想要一个最简单的代办任务功能,作为一个极简主义者,完全不能忍受,所以打算基于 Racket 开发一个 To-Do List 工具。

技术选型

这个 To-Do List 工具打算全部采用 Racket 进行实现,这样可以很容易就达到跨平台的效果。其中 GUI 界面采用 racket/gui 库来实现,后端的数据使用 json 格式保存。如果想要多端同步的效果,通过第三方云盘同步后台的 json 数据即可。

界面布局

左侧菜单栏(侧边栏)

任务展示区域

底部操作

控件列表

功能 控件 实现难度
主窗口 frame%
侧边栏(任务列表) list-box% 或 vertical-panel%
任务列表区 panel% + canvas%
任务项 check-box% + message%
添加新任务 button% + text-field%
任务完成状态切换 check-box% 事件回调
任务日期显示 message%

难点分析

  1. 界面布局
    • racket/gui 使用面板(panel%)进行布局,需要合理组织 horizontal-panel% 和 vertical-panel%,以保持界面结构一致。
    • 滚动条(vertical-panel%)需要确保任务较多时可以滚动。
  2. 任务数据存储
    • 选择 JSON 或 SQLite 进行本地存储:JSON 适合小型数据,易读易改。SQLite 适合扩展,但需要额外的数据库操作。
  3. 交互逻辑
    • 任务完成状态变化后,是否隐藏任务(如果在「今天」视图中)。
    • 任务添加后 UI 需动态刷新。

任务分解